/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jepi;

import db.MySQLManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author Steve
 */
public class CostoBeneficioProyecto {

    int idProyecto;
    int periodo;
    String descripcion;
    float monto;
    boolean esCosto;

    public void guardar() {
        PreparedStatement ps = null;
        String insert = "INSERT INTO costo_beneficio_proyecto "
                + "(id_proyecto,periodo, descripcion, monto, es_costo) "
                + "values (?,?,?,?,?)";
        String update = "UPDATE costo_beneficio_proyecto set monto=? "
                + "WHERE id_proyecto=? AND periodo=? AND descripcion=?";
        String select = "SELECT * FROM costo_beneficio_proyecto "
                + "WHERE id_proyecto=" + idProyecto + " AND periodo=" + periodo + " AND descripcion='" + descripcion + "'";
        int aj = 0;
        try {
            if (MySQLManager.contarRegistros(select) > 0) {
                ps = MySQLManager.getConexionEstatica().prepareStatement(update);
                ps.setFloat(1, monto);
                aj = 1;
            } else {
                ps = MySQLManager.getConexionEstatica().prepareStatement(insert);
                ps.setFloat(4, monto);
                ps.setBoolean(5, esCosto);
            }
            ps.setInt(1 + aj, idProyecto);
            ps.setInt(2 + aj, periodo);
            ps.setString(3 + aj, descripcion);
            ps.executeUpdate();
        } catch (SQLException es) {
            System.out.println(es);
        }
    }

    public void eliminar(boolean todos) {
        PreparedStatement ps = null;
        String delete1 = "DELETE FROM costo_beneficio_proyecto "
                + "WHERE id_proyecto=? AND descripcion=? AND periodo=?";
        String deleteAll = "DELETE FROM costo_beneficio_proyecto "
                + "WHERE id_proyecto=? AND descripcion=?";
        try {
            if (todos) {
                ps = MySQLManager.getConexionEstatica().prepareStatement(deleteAll);                
            } else {
                ps = MySQLManager.getConexionEstatica().prepareStatement(delete1);
                ps.setInt(3, periodo);
            }
            ps.setInt(1, idProyecto);
            ps.setString(2, descripcion);
            ps.executeUpdate();
        } catch (SQLException ex) {
            System.out.println(ex);
        }
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public boolean isEsCosto() {
        return esCosto;
    }

    public void setEsCosto(boolean esCosto) {
        this.esCosto = esCosto;
    }

    public int getIdProyecto() {
        return idProyecto;
    }

    public void setIdProyecto(int idProyecto) {
        this.idProyecto = idProyecto;
    }

    public float getMonto() {
        return monto;
    }

    public void setMonto(float monto) {
        this.monto = monto;
    }

    public int getPeriodo() {
        return periodo;
    }

    public void setPeriodo(int periodo) {
        this.periodo = periodo;
    }

    public float[] obtenerCostos(int idProyecto) {
        return calcularTotales(idProyecto, true);
    }

    public float[] obtenerBeneficios(int idProyecto) {
        return calcularTotales(idProyecto, false);
    }

    private float[] calcularTotales(int idProyecto, boolean esCosto) {
        float[] ret = null;
        try {
            String sql = "select periodo,sum(monto) as monto "
                    + "from costo_beneficio_proyecto "
                    + "where id_proyecto= " + idProyecto
                    + " and es_costo= " + (esCosto ? 1 : 0)
                    + " group by periodo order by periodo";
            Proyecto p = new Proyecto();
            p.cargar(idProyecto);
            ResultSet costos = MySQLManager.ejecutarConsultaSelect(sql);
            ret = new float[p.getVidaEconomica()];
            if (costos.next()) {
                for (int i = 0; i < ret.length; i++) {
                    if (costos.getInt("periodo") == i + 1) {
                        ret[i] = costos.getFloat("monto");
                        costos.next();
                    } else {
                        ret[i] = 0.0f;
                    }
                }
            } else {
                for (int i = 0; i < ret.length; i++) {
                    ret[i] = 0.0f;
                }
            }
        } catch (SQLException ex) {
            System.out.println(ex);
        }
        return ret;
    }
}
